'''
Created on 15/10/2011

@author: Daniel
'''
from Tkinter import *
import tkMessageBox
from VariaveisGlobais import *
import datetime
from Programa import *
from Controle import *
from Biblioteca import *
from Endereco import *
from Aluno import *


class Janela_novo_emprestimo_aluno:
    def __init__(self, raiz):
        self.meuPai = raiz
        
        self.frame1=Frame(self.meuPai)
        self.frame1.grid(row = 1, column = 2)
        self.frame2=Frame(self.meuPai)
        self.frame2.grid(row = 2, column = 2)
        self.frame3=Frame(self.meuPai)
        self.frame3.grid(row = 1, column = 1)
        self.frame4=Frame(self.meuPai)
        self.frame4.grid(row = 2, column = 1)
        self.frame5=Frame(self.meuPai)
        self.frame5.grid(row = 4, column = 1)
        self.frame6=Frame(self.meuPai)
        self.frame6.grid(row = 3, column = 1)
        self.frame7=Frame(self.meuPai)
        self.frame7.grid(row = 3, column = 2)
        self.frame8=Frame(self.meuPai)
        self.frame8.grid(row = 4, column = 2)
        self.frame9=Frame(self.meuPai)
        self.frame9.grid(row = 5, column = 1)
        self.frame10=Frame(self.meuPai)
        self.frame10.grid(row = 5, column = 2)
        
        Label(self.frame1, text='Pesquisar Aluno', font = fonte_label).grid(row = 1, column = 1, sticky = W)
                
        self.var_escolha_aluno = StringVar(self.frame1)
        self.var_escolha_aluno.set('Nome') 
        self.escolha = OptionMenu(self.frame1, self.var_escolha_aluno, 'Nome', 'Matricula')
        self.escolha.config(width = 8)        
        self.escolha.grid(row = 2, column = 1, sticky = W)

        self.texto_aluno = Entry(self.frame1, width = 20, font = fonte_texto)
        self.texto_aluno.grid(row = 2, column = 2, sticky = W)
        self.texto_aluno.focus_force()

        Label(self.frame1, text='     ', font = fonte_label).grid(row = 2, column = 3, sticky = W)
        self.botao_pesquisar_aluno = Button(self.frame1, width = 15, command = self.pesquisar_aluno, text = "Pesquisar")
        self.botao_pesquisar_aluno.grid(row = 2, column = 4)

        Label(self.frame2, text='Nome    /    N Matricula', font = fonte_label).grid(row = 1, column = 1, sticky = W)
        self.listbox_alunos = Listbox(self.frame2, font = fonte_texto, width = 45)
        self.listbox_alunos.grid(row = 2, column = 1, sticky = W)

        self.scroll = Scrollbar(self.frame2, command = self.listbox_alunos.yview)
        self.scroll.grid(row = 2, column = 2, sticky=(N,S))

        self.listbox_alunos['yscrollcommand'] = self.scroll.set

        Label(self.frame3, text="Pesquisar Publicacao", font = fonte_label).grid(row = 1, column = 1, sticky = W)

        self.var_escolha_publicacao = StringVar(self.frame1)
        self.var_escolha_publicacao.set('Livro Didatico') 
        self.escolha = OptionMenu(self.frame3, self.var_escolha_publicacao, 'Livro Didatico', 'Livro Paradidatico', 'Revista', 'Artigo Jornal')
        self.escolha.config(width = 19)        
        self.escolha.grid(row = 2, column = 1, sticky = W)

        self.texto_publicacao = Entry(self.frame3, width = 20, font = fonte_texto)
        self.texto_publicacao.grid(row = 2, column = 2, sticky = W)

        Label(self.frame3, text='     ', font = fonte_label).grid(row = 2, column = 3, sticky = W)
        self.botao_pesquisar_publicacao = Button(self.frame3, width = 15, command = self.pesquisar_livro, text = "Pesquisar")
        self.botao_pesquisar_publicacao.grid(row = 2, column = 4)

        Label(self.frame4, text='Titulo    /    Codigo', font = fonte_label).grid(row = 1, column = 1, sticky = W)
        self.listbox_publicacoes = Listbox(self.frame4, font = fonte_texto, width = 45)
        self.listbox_publicacoes.grid(row = 2, column = 1, sticky = W)

        self.scroll = Scrollbar(self.frame4, command = self.listbox_publicacoes.yview)
        self.scroll.grid(row = 2, column = 2, sticky=(N,S))

        self.listbox_publicacoes['yscrollcommand'] = self.scroll.set
        
        Label(self.frame6, text='', font = fonte_label).grid(row = 1, column = 1, sticky = W)
        self.botao_adicionar_obra = Button(self.frame6, width = 20, command = self.escolha_publicacao, text = "Adicionar Publicacao")
        self.botao_adicionar_obra.grid(row = 2, column = 1)
        
        Label(self.frame7, text='', font = fonte_label).grid(row = 1, column = 1, sticky = W)
        self.botao_adicionar_obra = Button(self.frame7, width = 20, command = self.escolha_aluno, text = "Adicionar Cliente")
        self.botao_adicionar_obra.grid(row = 2, column = 1)

        Label(self.frame5, text="Titulo / Codigo", font = fonte_label).grid(row = 1, column = 1, sticky = W)
        self.listbox_publicacoes_selecionadas = Listbox(self.frame5, font = fonte_texto, width = 60, height = 4)
        self.listbox_publicacoes_selecionadas.grid(row = 2, column = 1, sticky = W)
        
        Label(self.frame5, text = '').grid(row = 3, column = 1)
        self.botao_excluir_livro = Button(self.frame5, width = 25, command = self.excluir_publicacao, text = "Excluir Publicacao Selecionada")
        self.botao_excluir_livro.grid(row = 4, column = 1, padx= 10, sticky = W)
        Label(self.frame5, text="Data Prevista de Entrega", font = fonte_label).grid(row = 3, column = 1, sticky = E)

        #A data de devolucao aparece aqui
        self.data_entrega = Label(self.frame5, text = '                ', font = fonte_texto)
        self.data_entrega.grid(row = 4, column = 1, sticky = E)
        
        Label(self.frame8, text = '').grid(row = 1, column = 1)
        Label(self.frame8, text="Nome Aluno: ", font = fonte_label).grid(row = 2, column = 1, sticky = W)
        self.campo_nome_aluno = Label(self.frame8, text='                                                    ', font = fonte_texto)
        self.campo_nome_aluno.grid(row = 2, column = 2, sticky = W)
        Label(self.frame8, text="Matricula: ", font = fonte_label).grid(row = 3, column = 1, sticky = W)
        self.campo_matricula = Label(self.frame8, text='                                                    ', font = fonte_texto)
        self.campo_matricula.grid(row = 3, column = 2, sticky = W)
        Label(self.frame8, text="Autorizado: ", font = fonte_label).grid(row = 4, column = 1, sticky = W)
        self.campo_autorizado = Label(self.frame8, text='                                                    ', font = fonte_texto)
        self.campo_autorizado.grid(row = 4, column = 2, sticky = W)
        Label(self.frame8, text="Max Emprestimo autorizado: ", font = fonte_label).grid(row = 5, column = 1, sticky = W)
        self.campo_max_emprestimo = Label(self.frame8, text='                                                    ', font = fonte_texto)
        self.campo_max_emprestimo.grid(row = 5, column = 2, sticky = W)
        
        Label(self.frame8, text = '').grid(row = 6, column = 1)
        Label(self.frame8, text = '').grid(row = 7, column = 1)
        
        Label(self.frame9, text="", font = fonte_label).grid(row = 1, column = 1, sticky = W)
        self.botao_finalizar = Button(self.frame9, width = 19, command = self.emprestar, text = "Concluir Emprestimo")
        self.botao_finalizar.grid(row = 3, column = 4, sticky = E)
        
        Label(self.frame10, text=" ", font = fonte_label).grid(row = 1, column = 1, sticky = W)
        self.botao_cancelar = Button(self.frame10, width = 19, command = self.cancelar, text = "Cancelar")
        self.botao_cancelar.grid(row = 3, column = 4, sticky = W)
        
        self.ctrl_publicacao = 0
        self.ctrl_aluno = 0
        self.lista_publicacoes_selecionadas = []
        self.lista_aluno_selecionado = []

    def data_de_entrega(self):
        agora = datetime.date.today()
        if len(self.lista_publicacoes_selecionadas) == 0:
            self.data_entrega['text'] = '                '
        elif len(self.lista_publicacoes_selecionadas) == 1:
            self.entrega = agora + datetime.timedelta(days=3)
            self.data_entrega['text'] = self.entrega.strftime('%d/%m/%Y')
        elif len(self.lista_publicacoes_selecionadas) == 2:
            self.entrega = agora + datetime.timedelta(days=6)
            self.data_entrega['text'] = self.entrega.strftime('%d/%m/%Y')
        elif len(self.lista_publicacoes_selecionadas) == 3:
            self.entrega = agora + datetime.timedelta(days=9)
            self.data_entrega['text'] = self.entrega.strftime('%d/%m/%Y')
        
    def pesquisar_aluno(self):
        self.listbox_alunos.delete(0, END)
        
        if self.var_escolha_aluno.get() == 'Nome':
            self.resultado_aluno = programa.consultar_aluno("nome", self.texto_aluno.get())
            
            for objeto in self.resultado_aluno:
                self.nome = objeto[1]
                self.matricula = objeto[5]
                
                self.listbox_alunos.insert(END, str(self.nome) + '     ' + str(self.matricula))
                
        if self.var_escolha_aluno.get() == "Matricula":
            self.resultado_aluno = programa.consultar_aluno("matricula", self.texto_aluno.get())
            
            for objeto in self.resultado_aluno:
                self.nome = objeto[1]
                self.matricula = objeto[5]
                
                self.listbox_alunos.insert(END, str(self.nome) + '     ' + str(self.matricula))
                
    def escolha_aluno(self):
        try:
            self.lista_aluno_selecionado = []
            indice = self.listbox_alunos.curselection()[0]
            self.valor = self.resultado_aluno[int(indice)]
            self.lista_aluno_selecionado.append(self.valor)
            
            self.campo_nome_aluno['text'] = self.valor[1]
            self.campo_matricula['text'] = self.valor[5]
            if self.valor[16] == 1:
                self.campo_autorizado['text'] = "Sim"
            else:
                self.campo_autorizado['text'] = "Nao"
            self.campo_max_emprestimo['text'] = str(self.valor[15])
        except:
            tkMessageBox.showwarning('Mensagem do sistema', 'Voce deve selecionar um item para poder adiciona-lo')
    
    def excluir_aluno(self):
        pass              
                            
    def pesquisar_livro(self):
        self.listbox_publicacoes.delete(0, END)
        if self.var_escolha_publicacao.get() == "Livro Didatico":
            tabela = "livro_didatico"
        elif self.var_escolha_publicacao.get() == "Livro Paradidatico":
            tabela = "livro_paradidatico"
        elif self.var_escolha_publicacao.get() == "Revista":
            tabela = "revista"
        elif self.var_escolha_publicacao.get() == "Artigo Jornal":
            tabela = "artigo"
            
        self.resultado_publicacao = programa.consultar_publicacao(tabela, "codigo", self.texto_publicacao.get())
        
            
        for objeto in self.resultado_publicacao:
            #e preciso um if para caso a tebela seja igual a revista ou artigo, o codigo desses itens estao em indices diferentes.
            #e necessario descobrir uma forma de fazer isso para todas as manipulacoes de publicacoes
            self.titulo = objeto[1]
            self.codigo = objeto[8]
                    
            self.listbox_publicacoes.insert(END, str(self.titulo) + '     ' + str(self.codigo))

    def escolha_publicacao(self):
        try:
            self.achei = False  # Variavel para controle do for
            indice = self.listbox_publicacoes.curselection()[0]
            self.valor = self.resultado_publicacao[int(indice)]
            #a funcao pergunta se a lista de publicacao esta vazia
            if self.lista_publicacoes_selecionadas != []:
                #se a lista nao estiver vazia ele varre a lista procurando os objetos contidos nela
                for objeto in self.lista_publicacoes_selecionadas:
                    #se achar algum objeto semelhante ao objeto selecionado retorna a mensagem de alerta e muda achei para verdadeiro
                    if objeto[9] == self.valor[9] and objeto[8] == self.valor[8]:
                        tkMessageBox.showwarning('Mensagem do sistema', 'Este item ja foi adicionado')
                        self.achei = True
                        break
                #se achei for falso ele entra no proximo if de controle de quantidade
                if not self.achei:                  
                    if self.ctrl_publicacao < 3:
                        self.lista_publicacoes_selecionadas.append(self.valor)
                        self.ctrl_publicacao = self.ctrl_publicacao + 1
                        self.listbox_publicacoes_selecionadas.insert(END, self.valor[1] + '     ' + self.valor[8])
                        self.data_de_entrega()
                    else:
                        tkMessageBox.showwarning('Mensagem do sistema', 'So e possivel efetuar 3 emprestimos por vez')
            #Caso a lista esteja vazia ele adiciona o objeto normalmente
            else:
                if self.ctrl_publicacao < 3:
                    self.lista_publicacoes_selecionadas.append(self.valor)
                    self.ctrl_publicacao = self.ctrl_publicacao + 1
                    self.listbox_publicacoes_selecionadas.insert(END, self.valor[1] + '     ' + self.valor[8])
                    self.data_de_entrega()
                else:
                    tkMessageBox.showwarning('Mensagem do sistema', 'So e possivel efetuar 3 emprestimos por vez')
                          
        except:
            tkMessageBox.showwarning('Mensagem do sistema', 'Voce deve selecionar um item para poder adiciona-lo')
          
            
    def excluir_publicacao(self):
        try:
            indice = self.listbox_publicacoes_selecionadas.curselection()[0]
            
            if self.ctrl_publicacao <= 0:
                tkMessageBox.showwarning('Mensagem do sistema', 'Operacao invalida, nenhum publicacao foi selecionada')
            else:
                #quando escluir o objeto e preciso tambem exclui-lo da lista
                del self.lista_publicacoes_selecionadas[int(indice)]
                self.ctrl_publicacao = self.ctrl_publicacao - 1
                self.listbox_publicacoes_selecionadas.delete( int(indice))
                self.data_de_entrega()
        except:
            tkMessageBox.showwarning('Mensagem do sistema', 'Voce deve selecionar um item para poder exclui-lo')
          
    def emprestar(self):
        if self.lista_aluno_selecionado == []:
            tkMessageBox.showwarning('Mensagem do sistema', 'Voce deve selecionar um aluno para realizar o emprestimo')
        else:
            self.objeto = self.lista_aluno_selecionado[0]
            #instancia o endereco
            self.endereco = Endereco()
            self.endereco.set_nome_da_rua(self.objeto[8])
            self.endereco.set_numero(self.objeto[9])
            self.endereco.set_cep(self.objeto[10])
            self.endereco.set_complemento(self.objeto[11])
            self.endereco.set_bairro(self.objeto[12])
            self.endereco.set_cidade(self.objeto[13])
            self.endereco.set_estado(self.objeto[14])
            
            #instancia o aluno
            self.aluno = Aluno()
            self.aluno.set_nome(self.objeto[1])
            self.aluno.set_serie(self.objeto[2])
            self.aluno.set_periodo(self.objeto[3])
            self.aluno.set_turno(self.objeto[4])
            self.aluno.set_matricula(self.objeto[5])
            self.aluno.set_email(self.objeto[6])
            self.aluno.set_email_pais(self.objeto[7])
            self.aluno.set_endereco(self.endereco)
            self.aluno.set_numero_max_emprestimo(self.objeto[15])
            self.aluno.set_autorizacao(self.objeto[16])
            self.aluno.set_deletado(self.objeto[17])
            self.aluno.set_livros_de_posse(self.objeto[18])
            
            if self.lista_publicacoes_selecionadas == []:
                tkMessageBox.showwarning('Mensagem do sistema', 'Voce deve adicionar pelo menos uma publicacao para efetuar um emprestimo.')
            else:
                
                #formato da data reconhecido pelo mysql
                self.data = self.entrega.strftime('%Y-%m-%d')
                
                #precisa implementar um identificador do tipo dos livros que estao sendo armazenados para a funcao
                #de dar update no banco reconhecer em qual banco ela precisa fazer o update
                self.valido = controle.verificar_emprestimo_pendente_aluno(self.aluno, self.lista_publicacoes_selecionadas, len(self.lista_publicacoes_selecionadas), self.data)
                
                if self.valido:
                    biblioteca.realizar_emprestimo_aluno(self.aluno, self.lista_publicacoes_selecionadas, len(self.lista_publicacoes_selecionadas), self.data)
                    
                #e preciso colocar uma funcao para atualizar o frame caso o emprestimo seja efetuado com sucesso
                
    def cancelar(self):
        try:
            self.meuPai.destroy()
            self.container = Frame(self.meuPai)
        except:
            pass